namespace CSharpPro.User;
/*7. 用户登陆与注册
一、核心功能需求
1.1 用户注册
ⅰ. 允许新用户创建账号，需输入：用户名、密码、确认密码
ⅱ. 注册成功后自动返回主菜单，可选择登录
1.2 用户登录
ⅰ. 已注册用户输入用户名和密码进行验证
ⅱ. 验证通过后显示登录成功信息，并进入系统首页（模拟）
ⅲ. 验证失败时提示错误原因（如用户名不存在、密码错误）
1.3 主菜单交互
ⅰ. 程序启动后显示主菜单：1. 登录 2. 注册 3. 退出
ⅱ. 用户通过输入数字选择功能，输入错误时提示重新输入
二、数据验证规则
2.1 用户名规则
ⅰ. 长度必须为 3-15 个字符
ⅱ. 只能包含字母、数字、下划线（_）
2.2 密码规则
ⅰ. 长度必须为 6-20 个字符
ⅱ. 必须包含至少 1 个大写字母、1 个小写字母和 1 个数字
ⅲ. 密码与确认密码必须一致
2.3 输入容错
ⅰ. 处理用户输入的空值或纯空格（提示 “不可为空”）
ⅱ. 处理菜单选择时的非数字输入（提示 “请输入有效数字”）*/
public class User
{
private List<User> users = new List<User>();
        // 用于存储当前登录用户
        public User CurrentUser { get; private set; }

        // 用户注册方法
        public string Register(string username, string password, string confirmPassword)
        {
            // 检查用户名是否为空或纯空格
            if (string.IsNullOrWhiteSpace(username))
            {
                return "用户名不可为空";
            }
            // 检查密码是否为空或纯空格
            if (string.IsNullOrWhiteSpace(password))
            {
                return "密码不可为空";
            }
            // 检查确认密码是否为空或纯空格
            if (string.IsNullOrWhiteSpace(confirmPassword))
            {
                return "确认密码不可为空";
            }
            // 检查用户名长度是否在 3 - 15 个字符之间
            if (username.Length < 3 || username.Length > 15)
            {
                return "用户名长度必须为 3 - 15 个字符";
            }
            // 检查用户名是否只包含字母、数字、下划线
            if (!Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$"))
            {
                return "用户名只能包含字母、数字、下划线";
            }
            // 检查密码长度是否在 6 - 20 个字符之间
            if (password.Length < 6 || password.Length > 20)
            {
                return "密码长度必须为 6 - 20 个字符";
            }
            // 检查密码是否包含至少 1 个大写字母、1 个小写字母和 1 个数字
            if (!Regex.IsMatch(password, @"[A-Z]") || !Regex.IsMatch(password, @"[a-z]") || !Regex.IsMatch(password, @"[0-9]"))
            {
                return "密码必须包含至少 1 个大写字母、1 个小写字母和 1 个数字";
            }
            // 检查密码与确认密码是否一致
            if (password != confirmPassword)
            {
                return "密码与确认密码不一致";
            }
            // 检查用户名是否已存在
            if (users.Any(u => u.Username == username))
            {
                return "用户名已存在";
            }
            // 添加用户到用户列表
            users.Add(new User { Username = username, Password = password });
            return "注册成功";
        }

        // 用户登录方法
        public string Login(string username, string password)
        {
            // 检查用户名是否为空或纯空格
            if (string.IsNullOrWhiteSpace(username))
            {
                return "用户名不可为空";
            }
            // 检查密码是否为空或纯空格
            if (string.IsNullOrWhiteSpace(password))
            {
                return "密码不可为空";
            }
            // 查找用户
            User user = users.FirstOrDefault(u => u.Username == username);
            // 检查用户是否存在
            if (user == null)
            {
                return "用户名不存在";
            }
            // 检查密码是否正确
            if (user.Password != password)
            {
                return "密码错误";
            }
            // 设置当前登录用户
            CurrentUser = user;
            return "登录成功";
        }
}